package com.woniu.project.controller;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.api.R;
import com.woniu.project.client.ManagementClient;
import com.woniu.project.core.dto.ResultDto;
import com.woniu.project.dto.StoreDto;
import com.woniu.project.dto.StoreManagementDto;
import com.woniu.project.params.SelectParam;
import com.woniu.project.params.StoreManagementParams;
import com.woniu.project.params.StoreParams;
import com.woniu.project.service.StoreService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author Klaus
 * @since 2020-10-15
 */
@RestController
@RequestMapping("/pawn/store")
@Slf4j
@Api(tags = "Store 控制层")
public class StoreController {

    @Autowired
    private StoreService storeService;

    /**
     * 分页查询所有的仓库
     * page:页数 默认值 1
     * size:每页条数 默认值 10
     * @return
     */
    @ApiOperation(value="分页查询所有的仓库",notes="非必填参数     " +
            "* page:页数 默认值 1\n" +
            "* size:每页条数 默认值 10")
    @GetMapping("selectAllStore")
    public ResultDto selectAllStore(SelectParam selectParam){
        IPage<StoreDto> storeDtoIPage = storeService.selectAllStore(selectParam);
        return ResultDto.success(storeDtoIPage);
    }

    /**
     * 按条件查询仓库(分页)
     * page:页数 默认值 1
     * size:每页条数 默认值 10
     * StoreParams:仓库名称或联系人名称或联系人手机号
     * StoreStatus:仓库状态 使用/停用
     * @param selectParam
     * @return
     */
    @ApiOperation(value="按条件查询仓库(分页)",notes="非必填参数：" +
            "     * page:页数 默认值 1\n" +
            "     * size:每页条数 默认值 10\n" +
            "     * StoreParams:仓库名称或联系人名称或联系人手机号\n" +
            "     * StoreStatus:仓库状态 使用/停用")
    @GetMapping("selectStoreByCondition")
    public ResultDto selectStoreByCondition(SelectParam selectParam){
        IPage<StoreManagementDto> storeManagementDtoIPage = storeService.selectStoreByCondition(selectParam);
        return ResultDto.success(storeManagementDtoIPage);
    }

    /**
     * 根据ID查询仓库
     * @param storeId
     * @return
     */
    @ApiOperation(value="根据ID查询仓库",notes="必填参数：storeId 仓库ID")
    @GetMapping("selectStoreById")
    public ResultDto selectStoreById(String storeId){
        StoreDto storeDto = storeService.selectStoreById(storeId);
        return ResultDto.success(storeDto);
    }

    /**
     * 新增仓库信息
     * 必填参数：
     * StoreName：仓库名称
     * managementid ：仓库管理员的ID
     * StoreStatus ：仓库状态
     * StoreAddr：仓库地址
     *
     * @return
     */
    @ApiOperation(value="新增仓库信息",notes="必填参数" +
            "     * StoreName：仓库名称\n" +
            "     * managementid ：仓库管理员的ID\n" +
            "     * StoreStatus ：仓库状态\n" +
            "     * StoreAddr：仓库地址")
    @PostMapping("insertStore")
    public ResultDto insertStore(StoreParams storeParams){
        storeService.insertStore(storeParams);
        return ResultDto.success();
    }

    /**
     * 修改仓库信息
     * 必填参数：
     * storeId:仓库编号
     * StoreName：仓库名称
     * managementid ：仓库管理员的ID
     * StoreStatus ：仓库状态
     * StoreAddr：仓库地址
     * @param storeParams
     * @return
     */
    @ApiOperation(value="修改仓库信息",notes="必填参数" +
            "     * storeId:仓库编号\n" +
            "     * StoreName：仓库名称\n" +
            "     * managementid ：仓库管理员的ID\n" +
            "     * StoreStatus ：仓库状态\n" +
            "     * StoreAddr：仓库地址")
    @PostMapping("updateStoreById")
    public ResultDto updateStoreById(StoreParams storeParams){
        storeService.updateStoreById(storeParams);
        return ResultDto.success();
    }

    /**
     * 按仓库ID删除仓库
     * @param storeId
     * @return
     */
    @ApiOperation(value="按仓库ID删除仓库",notes="必填参数" +
            "storeId 仓库ID")
    @PostMapping("deleteStoreById")
    public ResultDto deleteStoreById(String storeId){
        storeService.deleteStoreById(storeId);
        return ResultDto.success();
    }

}

